package ca.ulaval.ift.gloo.SimSolution.model;


import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public final class Plan {
	
    private static  Plan instance = null;
    
    private Map<Integer, Noeud> listeNoeuds = new HashMap<Integer, Noeud>();
    private Map<Integer, Arc> listeArcs = new HashMap<Integer, Arc>();
    private static int generateurIdNoeud;
    private static int generateurIdArc;
    
   
    private Plan() {

    }
    

    public final static Plan getInstance() {
        if (Plan.instance == null) {
        	Plan.instance = new Plan();
        	generateurIdNoeud = 0;
        	generateurIdArc = 0;
        }
 
        return Plan.instance;
    }
    
    public void addNoeud(Noeud n){
    	if(!listeNoeuds.containsValue(n))
    		listeNoeuds.put(n.getIdNoeud(), n);
    }
    
    public void addArc(Arc a){
    	if(!listeArcs.containsValue(a))
    		listeArcs.put(a.getIdArc(), a);
    }


	public Collection<Noeud> getListeNoeuds() {
		return listeNoeuds.values();
	}


	public void setListeNoeuds(List<Noeud> listeNoeuds) {
		this.listeNoeuds = new HashMap<Integer, Noeud>();
		for(Noeud n : listeNoeuds)
			this.listeNoeuds.put(n.getIdNoeud(), n);
	}


	public Collection<Arc> getListeArcs() {
		return listeArcs.values();
	}


	public void setListeArcs(List<Arc> listeArcs) {
		this.listeArcs = new HashMap<Integer, Arc>();
		for(Arc a : listeArcs)
			this.listeArcs.put(a.getIdArc(), a);
	}
	
	public int getNbNoeud(){
		return listeNoeuds.size();
	}
	
	public int getNbArc(){
		return listeArcs.size();
	}
	
	public int getNextIdNoeud(){
		return generateurIdNoeud++;
	}
	
	public int getNextIdArc(){
		return generateurIdArc++;
	}
	
	public Noeud getNoeudById(int id){
		return listeNoeuds.get(id);
	}
	
	public Arc getArcById(int id){
		return listeArcs.get(id);
	}
}
